// 弹出窗口脚本，处理用户交互和API调用

document.addEventListener('DOMContentLoaded', function() {
  // 获取DOM元素
  const elements = {
    selectedText: document.getElementById('selectedText'),
    operation: document.getElementById('operation'),
    languageContainer: document.getElementById('languageContainer'),
    targetLanguage: document.getElementById('targetLanguage'),
    apiKey: document.getElementById('apiKey'),
    processBtn: document.getElementById('processBtn'),
    result: document.getElementById('result'),
    loading: document.getElementById('loading'),
    errorContainer: document.getElementById('errorContainer'),
    error: document.getElementById('error')
  };

  // 超时设置（毫秒）
  const API_TIMEOUT = 30000; // 30秒超时

  // 初始化界面
  initializePopup();

  // 监听操作选择变化
  elements.operation?.addEventListener('change', function() {
    toggleLanguageContainer(this.value === 'translate');
  });

  // 监听处理按钮点击事件
  elements.processBtn?.addEventListener('click', processText);

  // 切换语言选择器显示状态
  function toggleLanguageContainer(show) {
    if (elements.languageContainer) {
      elements.languageContainer.style.display = show ? 'flex' : 'none';
    }
  }

  // 初始化弹出窗口
  async function initializePopup() {
    try {
      // 获取存储的API密钥
      const { apiKey } = await chrome.storage.local.get(['apiKey']);
      if (apiKey && elements.apiKey) {
        elements.apiKey.value = apiKey;
      }
      
      // 获取存储的选中文本
      const { selectedText } = await chrome.storage.local.get(['selectedText']);
      if (selectedText && elements.selectedText) {
        elements.selectedText.value = selectedText;
      } else if (elements.selectedText) {
        // 如果没有存储的文本，尝试从当前页面获取
        try {
          const [tab] = await chrome.tabs.query({active: true, currentWindow: true});
          if (tab?.id) {
            const response = await chrome.tabs.sendMessage(tab.id, {action: 'getSelectedText'});
            if (response?.text) {
              elements.selectedText.value = response.text;
              await chrome.storage.local.set({ selectedText: response.text });
            }
          }
        } catch (error) {
          console.error('获取选中文本失败:', error);
        }
      }
      
      // 根据操作类型初始化语言选择器状态
      toggleLanguageContainer(elements.operation?.value === 'translate');
    } catch (error) {
      console.error('初始化失败:', error);
      showError('初始化失败: ' + error.message);
    }
  }

  // 处理文本
  async function processText() {
    const selectedText = elements.selectedText?.value.trim();
    const operation = elements.operation?.value;
    const targetLanguage = elements.targetLanguage?.value;
    const apiKey = elements.apiKey?.value.trim();

    // 验证输入
    if (!selectedText) {
      showError('请选择要处理的文本');
      return;
    }

    if (!apiKey) {
      showError('请输入API密钥');
      return;
    }

    // 保存API密钥
    try {
      await chrome.storage.local.set({ apiKey });
    } catch (error) {
      showError('保存API密钥失败: ' + error.message);
      return;
    }

    // 显示加载状态
    showLoading();

    try {
      // 构造提示词
      let prompt = '';
      switch (operation) {
        case 'translate':
          prompt = `请将以下文本翻译成${getLanguageName(targetLanguage)}:\n\n${selectedText}`;
          break;
        case 'explain':
          prompt = `请解释以下文本的含义:\n\n${selectedText}`;
          break;
        case 'summarize':
          prompt = `请为以下文本生成一个简短的摘要:\n\n${selectedText}`;
          break;
        case 'expand':
          prompt = `请扩展以下文本，提供更详细的信息:\n\n${selectedText}`;
          break;
        default:
          prompt = selectedText;
      }

      // 使用Promise包装API调用以支持超时
      const apiCallPromise = callAIAPI(prompt, apiKey);
      const timeoutPromise = new Promise((_, reject) =>
        setTimeout(() => reject(new Error('请求超时，请稍后重试')), API_TIMEOUT)
      );

      // 调用AI API，支持超时处理
      const result = await Promise.race([apiCallPromise, timeoutPromise]);
      showResult(result);
    } catch (error) {
      console.error('API调用失败:', error);
      showError('处理失败: ' + error.message);
    }
  }

  // 调用AI API
  async function callAIAPI(prompt, apiKey) {
    // 这里我们模拟API调用，实际使用时需要替换为真实的API端点
    // 例如OpenAI GPT, Anthropic Claude, Google Gemini等
    
    // 模拟API延迟
    await new Promise(resolve => setTimeout(resolve, 1500));
    
    // 模拟API响应
    const simulatedResponse = {
      'translate': `这是"${prompt.split(':')[1].trim()}"的翻译结果示例。实际应用中，这里会显示由AI翻译的完整内容。`,
      'explain': `这是对"${prompt.split(':')[1].trim()}"的解释示例。实际应用中，这里会显示由AI生成的详细解释内容。`,
      'summarize': `这是"${prompt.split(':')[1].trim()}"的摘要示例。实际应用中，这里会显示由AI生成的简洁摘要内容。`,
      'expand': `这是对"${prompt.split(':')[1].trim()}"的扩展示例。实际应用中，这里会显示由AI生成的详细扩展内容，包括更多背景信息和相关细节。`
    };
    
    const operation = elements.operation?.value || 'explain';
    return simulatedResponse[operation] || '处理完成';
  }

  // 获取语言名称
  function getLanguageName(languageCode) {
    const languages = {
      'zh': '中文',
      'en': '英语',
      'ja': '日语',
      'ko': '韩语',
      'fr': '法语',
      'de': '德语'
    };
    return languages[languageCode] || languageCode;
  }

  // 显示加载状态
  function showLoading() {
    elements.loading?.classList.remove('hidden');
    if (elements.result) elements.result.textContent = '';
    if (elements.errorContainer) elements.errorContainer.style.display = 'none';
    if (elements.processBtn) elements.processBtn.disabled = true;
  }

  // 显示结果
  function showResult(result) {
    elements.loading?.classList.add('hidden');
    if (elements.result) elements.result.textContent = result;
    if (elements.errorContainer) elements.errorContainer.style.display = 'none';
    if (elements.processBtn) elements.processBtn.disabled = false;
  }

  // 显示错误
  function showError(message) {
    elements.loading?.classList.add('hidden');
    if (elements.error) elements.error.textContent = message;
    if (elements.errorContainer) elements.errorContainer.style.display = 'block';
    if (elements.processBtn) elements.processBtn.disabled = false;
  }
});